/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package origendatos.dyd.model;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
import origendatos.dyd.model.exceptions.IllegalOrphanException;
import origendatos.dyd.model.exceptions.NonexistentEntityException;
import origendatos.dyd.model.exceptions.PreexistingEntityException;

/**
 *
 * @author erodrig
 */
public class PjJpaController {

    public PjJpaController() {
        emf = Persistence.createEntityManagerFactory("OrigenDatosPU");
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Pj pj) throws PreexistingEntityException, Exception {
        if (pj.getConjurosList() == null) {
            pj.setConjurosList(new ArrayList<Conjuros>());
        }
        if (pj.getIdiomasPjList() == null) {
            pj.setIdiomasPjList(new ArrayList<IdiomasPj>());
        }
        if (pj.getCaracteristicasPjList() == null) {
            pj.setCaracteristicasPjList(new ArrayList<CaracteristicasPj>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Equipo equipo = pj.getEquipo();
            if (equipo != null) {
                equipo = em.getReference(equipo.getClass(), equipo.getPjId());
                pj.setEquipo(equipo);
            }
            Razas razas = pj.getRazas();
            if (razas != null) {
                razas = em.getReference(razas.getClass(), razas.getNombre());
                pj.setRazas(razas);
            }
            Escudos escudos = pj.getEscudos();
            if (escudos != null) {
                escudos = em.getReference(escudos.getClass(), escudos.getNombre());
                pj.setEscudos(escudos);
            }
            Deidades deidades = pj.getDeidades();
            if (deidades != null) {
                deidades = em.getReference(deidades.getClass(), deidades.getNombre());
                pj.setDeidades(deidades);
            }
            Clases clases = pj.getClases();
            if (clases != null) {
                clases = em.getReference(clases.getClass(), clases.getNombre());
                pj.setClases(clases);
            }
            Armas armas = pj.getArmas();
            if (armas != null) {
                armas = em.getReference(armas.getClass(), armas.getId());
                pj.setArmas(armas);
            }
            Armas armas1 = pj.getArmas1();
            if (armas1 != null) {
                armas1 = em.getReference(armas1.getClass(), armas1.getId());
                pj.setArmas1(armas1);
            }
            Armas armas2 = pj.getArmas2();
            if (armas2 != null) {
                armas2 = em.getReference(armas2.getClass(), armas2.getId());
                pj.setArmas2(armas2);
            }
            Armaduras armaduras = pj.getArmaduras();
            if (armaduras != null) {
                armaduras = em.getReference(armaduras.getClass(), armaduras.getNombre());
                pj.setArmaduras(armaduras);
            }
            Alineamientos alineamientos = pj.getAlineamientos();
            if (alineamientos != null) {
                alineamientos = em.getReference(alineamientos.getClass(), alineamientos.getAbreviatura());
                pj.setAlineamientos(alineamientos);
            }
            List<Conjuros> attachedConjurosList = new ArrayList<Conjuros>();
            for (Conjuros conjurosListConjurosToAttach : pj.getConjurosList()) {
                conjurosListConjurosToAttach = em.getReference(conjurosListConjurosToAttach.getClass(), conjurosListConjurosToAttach.getConjurosPK());
                attachedConjurosList.add(conjurosListConjurosToAttach);
            }
            pj.setConjurosList(attachedConjurosList);
            List<IdiomasPj> attachedIdiomasPjList = new ArrayList<IdiomasPj>();
            for (IdiomasPj idiomasPjListIdiomasPjToAttach : pj.getIdiomasPjList()) {
                idiomasPjListIdiomasPjToAttach = em.getReference(idiomasPjListIdiomasPjToAttach.getClass(), idiomasPjListIdiomasPjToAttach.getIdiomasPjPK());
                attachedIdiomasPjList.add(idiomasPjListIdiomasPjToAttach);
            }
            pj.setIdiomasPjList(attachedIdiomasPjList);
            List<CaracteristicasPj> attachedCaracteristicasPjList = new ArrayList<CaracteristicasPj>();
            for (CaracteristicasPj caracteristicasPjListCaracteristicasPjToAttach : pj.getCaracteristicasPjList()) {
                caracteristicasPjListCaracteristicasPjToAttach = em.getReference(caracteristicasPjListCaracteristicasPjToAttach.getClass(), caracteristicasPjListCaracteristicasPjToAttach.getCaracteristicasPjPK());
                attachedCaracteristicasPjList.add(caracteristicasPjListCaracteristicasPjToAttach);
            }
            pj.setCaracteristicasPjList(attachedCaracteristicasPjList);
            em.persist(pj);
            if (equipo != null) {
                Pj oldPjOfEquipo = equipo.getPj();
                if (oldPjOfEquipo != null) {
                    oldPjOfEquipo.setEquipo(null);
                    oldPjOfEquipo = em.merge(oldPjOfEquipo);
                }
                equipo.setPj(pj);
                equipo = em.merge(equipo);
            }
            if (razas != null) {
                razas.getPjList().add(pj);
                razas = em.merge(razas);
            }
            if (escudos != null) {
                escudos.getPjList().add(pj);
                escudos = em.merge(escudos);
            }
            if (deidades != null) {
                deidades.getPjList().add(pj);
                deidades = em.merge(deidades);
            }
            if (clases != null) {
                clases.getPjList().add(pj);
                clases = em.merge(clases);
            }
            if (armas != null) {
                armas.getPjList().add(pj);
                armas = em.merge(armas);
            }
            if (armas1 != null) {
                armas1.getPjList().add(pj);
                armas1 = em.merge(armas1);
            }
            if (armas2 != null) {
                armas2.getPjList().add(pj);
                armas2 = em.merge(armas2);
            }
            if (armaduras != null) {
                armaduras.getPjList().add(pj);
                armaduras = em.merge(armaduras);
            }
            if (alineamientos != null) {
                alineamientos.getPjList().add(pj);
                alineamientos = em.merge(alineamientos);
            }
            for (Conjuros conjurosListConjuros : pj.getConjurosList()) {
                conjurosListConjuros.getPjList().add(pj);
                conjurosListConjuros = em.merge(conjurosListConjuros);
            }
            for (IdiomasPj idiomasPjListIdiomasPj : pj.getIdiomasPjList()) {
                Pj oldPjOfIdiomasPjListIdiomasPj = idiomasPjListIdiomasPj.getPj();
                idiomasPjListIdiomasPj.setPj(pj);
                idiomasPjListIdiomasPj = em.merge(idiomasPjListIdiomasPj);
                if (oldPjOfIdiomasPjListIdiomasPj != null) {
                    oldPjOfIdiomasPjListIdiomasPj.getIdiomasPjList().remove(idiomasPjListIdiomasPj);
                    oldPjOfIdiomasPjListIdiomasPj = em.merge(oldPjOfIdiomasPjListIdiomasPj);
                }
            }
            for (CaracteristicasPj caracteristicasPjListCaracteristicasPj : pj.getCaracteristicasPjList()) {
                Pj oldPjOfCaracteristicasPjListCaracteristicasPj = caracteristicasPjListCaracteristicasPj.getPj();
                caracteristicasPjListCaracteristicasPj.setPj(pj);
                caracteristicasPjListCaracteristicasPj = em.merge(caracteristicasPjListCaracteristicasPj);
                if (oldPjOfCaracteristicasPjListCaracteristicasPj != null) {
                    oldPjOfCaracteristicasPjListCaracteristicasPj.getCaracteristicasPjList().remove(caracteristicasPjListCaracteristicasPj);
                    oldPjOfCaracteristicasPjListCaracteristicasPj = em.merge(oldPjOfCaracteristicasPjListCaracteristicasPj);
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findPj(pj.getId()) != null) {
                throw new PreexistingEntityException("Pj " + pj + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Pj pj) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Pj persistentPj = em.find(Pj.class, pj.getId());
            Equipo equipoOld = persistentPj.getEquipo();
            Equipo equipoNew = pj.getEquipo();
            Razas razasOld = persistentPj.getRazas();
            Razas razasNew = pj.getRazas();
            Escudos escudosOld = persistentPj.getEscudos();
            Escudos escudosNew = pj.getEscudos();
            Deidades deidadesOld = persistentPj.getDeidades();
            Deidades deidadesNew = pj.getDeidades();
            Clases clasesOld = persistentPj.getClases();
            Clases clasesNew = pj.getClases();
            Armas armasOld = persistentPj.getArmas();
            Armas armasNew = pj.getArmas();
            Armas armas1Old = persistentPj.getArmas1();
            Armas armas1New = pj.getArmas1();
            Armas armas2Old = persistentPj.getArmas2();
            Armas armas2New = pj.getArmas2();
            Armaduras armadurasOld = persistentPj.getArmaduras();
            Armaduras armadurasNew = pj.getArmaduras();
            Alineamientos alineamientosOld = persistentPj.getAlineamientos();
            Alineamientos alineamientosNew = pj.getAlineamientos();
            List<Conjuros> conjurosListOld = persistentPj.getConjurosList();
            List<Conjuros> conjurosListNew = pj.getConjurosList();
            List<IdiomasPj> idiomasPjListOld = persistentPj.getIdiomasPjList();
            List<IdiomasPj> idiomasPjListNew = pj.getIdiomasPjList();
            List<CaracteristicasPj> caracteristicasPjListOld = persistentPj.getCaracteristicasPjList();
            List<CaracteristicasPj> caracteristicasPjListNew = pj.getCaracteristicasPjList();
            List<String> illegalOrphanMessages = null;
            if (equipoOld != null && !equipoOld.equals(equipoNew)) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("You must retain Equipo " + equipoOld + " since its pj field is not nullable.");
            }
            for (IdiomasPj idiomasPjListOldIdiomasPj : idiomasPjListOld) {
                if (!idiomasPjListNew.contains(idiomasPjListOldIdiomasPj)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain IdiomasPj " + idiomasPjListOldIdiomasPj + " since its pj field is not nullable.");
                }
            }
            for (CaracteristicasPj caracteristicasPjListOldCaracteristicasPj : caracteristicasPjListOld) {
                if (!caracteristicasPjListNew.contains(caracteristicasPjListOldCaracteristicasPj)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain CaracteristicasPj " + caracteristicasPjListOldCaracteristicasPj + " since its pj field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (equipoNew != null) {
                equipoNew = em.getReference(equipoNew.getClass(), equipoNew.getPjId());
                pj.setEquipo(equipoNew);
            }
            if (razasNew != null) {
                razasNew = em.getReference(razasNew.getClass(), razasNew.getNombre());
                pj.setRazas(razasNew);
            }
            if (escudosNew != null) {
                escudosNew = em.getReference(escudosNew.getClass(), escudosNew.getNombre());
                pj.setEscudos(escudosNew);
            }
            if (deidadesNew != null) {
                deidadesNew = em.getReference(deidadesNew.getClass(), deidadesNew.getNombre());
                pj.setDeidades(deidadesNew);
            }
            if (clasesNew != null) {
                clasesNew = em.getReference(clasesNew.getClass(), clasesNew.getNombre());
                pj.setClases(clasesNew);
            }
            if (armasNew != null) {
                armasNew = em.getReference(armasNew.getClass(), armasNew.getId());
                pj.setArmas(armasNew);
            }
            if (armas1New != null) {
                armas1New = em.getReference(armas1New.getClass(), armas1New.getId());
                pj.setArmas1(armas1New);
            }
            if (armas2New != null) {
                armas2New = em.getReference(armas2New.getClass(), armas2New.getId());
                pj.setArmas2(armas2New);
            }
            if (armadurasNew != null) {
                armadurasNew = em.getReference(armadurasNew.getClass(), armadurasNew.getNombre());
                pj.setArmaduras(armadurasNew);
            }
            if (alineamientosNew != null) {
                alineamientosNew = em.getReference(alineamientosNew.getClass(), alineamientosNew.getAbreviatura());
                pj.setAlineamientos(alineamientosNew);
            }
            List<Conjuros> attachedConjurosListNew = new ArrayList<Conjuros>();
            for (Conjuros conjurosListNewConjurosToAttach : conjurosListNew) {
                conjurosListNewConjurosToAttach = em.getReference(conjurosListNewConjurosToAttach.getClass(), conjurosListNewConjurosToAttach.getConjurosPK());
                attachedConjurosListNew.add(conjurosListNewConjurosToAttach);
            }
            conjurosListNew = attachedConjurosListNew;
            pj.setConjurosList(conjurosListNew);
            List<IdiomasPj> attachedIdiomasPjListNew = new ArrayList<IdiomasPj>();
            for (IdiomasPj idiomasPjListNewIdiomasPjToAttach : idiomasPjListNew) {
                idiomasPjListNewIdiomasPjToAttach = em.getReference(idiomasPjListNewIdiomasPjToAttach.getClass(), idiomasPjListNewIdiomasPjToAttach.getIdiomasPjPK());
                attachedIdiomasPjListNew.add(idiomasPjListNewIdiomasPjToAttach);
            }
            idiomasPjListNew = attachedIdiomasPjListNew;
            pj.setIdiomasPjList(idiomasPjListNew);
            List<CaracteristicasPj> attachedCaracteristicasPjListNew = new ArrayList<CaracteristicasPj>();
            for (CaracteristicasPj caracteristicasPjListNewCaracteristicasPjToAttach : caracteristicasPjListNew) {
                caracteristicasPjListNewCaracteristicasPjToAttach = em.getReference(caracteristicasPjListNewCaracteristicasPjToAttach.getClass(), caracteristicasPjListNewCaracteristicasPjToAttach.getCaracteristicasPjPK());
                attachedCaracteristicasPjListNew.add(caracteristicasPjListNewCaracteristicasPjToAttach);
            }
            caracteristicasPjListNew = attachedCaracteristicasPjListNew;
            pj.setCaracteristicasPjList(caracteristicasPjListNew);
            pj = em.merge(pj);
            if (equipoNew != null && !equipoNew.equals(equipoOld)) {
                Pj oldPjOfEquipo = equipoNew.getPj();
                if (oldPjOfEquipo != null) {
                    oldPjOfEquipo.setEquipo(null);
                    oldPjOfEquipo = em.merge(oldPjOfEquipo);
                }
                equipoNew.setPj(pj);
                equipoNew = em.merge(equipoNew);
            }
            if (razasOld != null && !razasOld.equals(razasNew)) {
                razasOld.getPjList().remove(pj);
                razasOld = em.merge(razasOld);
            }
            if (razasNew != null && !razasNew.equals(razasOld)) {
                razasNew.getPjList().add(pj);
                razasNew = em.merge(razasNew);
            }
            if (escudosOld != null && !escudosOld.equals(escudosNew)) {
                escudosOld.getPjList().remove(pj);
                escudosOld = em.merge(escudosOld);
            }
            if (escudosNew != null && !escudosNew.equals(escudosOld)) {
                escudosNew.getPjList().add(pj);
                escudosNew = em.merge(escudosNew);
            }
            if (deidadesOld != null && !deidadesOld.equals(deidadesNew)) {
                deidadesOld.getPjList().remove(pj);
                deidadesOld = em.merge(deidadesOld);
            }
            if (deidadesNew != null && !deidadesNew.equals(deidadesOld)) {
                deidadesNew.getPjList().add(pj);
                deidadesNew = em.merge(deidadesNew);
            }
            if (clasesOld != null && !clasesOld.equals(clasesNew)) {
                clasesOld.getPjList().remove(pj);
                clasesOld = em.merge(clasesOld);
            }
            if (clasesNew != null && !clasesNew.equals(clasesOld)) {
                clasesNew.getPjList().add(pj);
                clasesNew = em.merge(clasesNew);
            }
            if (armasOld != null && !armasOld.equals(armasNew)) {
                armasOld.getPjList().remove(pj);
                armasOld = em.merge(armasOld);
            }
            if (armasNew != null && !armasNew.equals(armasOld)) {
                armasNew.getPjList().add(pj);
                armasNew = em.merge(armasNew);
            }
            if (armas1Old != null && !armas1Old.equals(armas1New)) {
                armas1Old.getPjList().remove(pj);
                armas1Old = em.merge(armas1Old);
            }
            if (armas1New != null && !armas1New.equals(armas1Old)) {
                armas1New.getPjList().add(pj);
                armas1New = em.merge(armas1New);
            }
            if (armas2Old != null && !armas2Old.equals(armas2New)) {
                armas2Old.getPjList().remove(pj);
                armas2Old = em.merge(armas2Old);
            }
            if (armas2New != null && !armas2New.equals(armas2Old)) {
                armas2New.getPjList().add(pj);
                armas2New = em.merge(armas2New);
            }
            if (armadurasOld != null && !armadurasOld.equals(armadurasNew)) {
                armadurasOld.getPjList().remove(pj);
                armadurasOld = em.merge(armadurasOld);
            }
            if (armadurasNew != null && !armadurasNew.equals(armadurasOld)) {
                armadurasNew.getPjList().add(pj);
                armadurasNew = em.merge(armadurasNew);
            }
            if (alineamientosOld != null && !alineamientosOld.equals(alineamientosNew)) {
                alineamientosOld.getPjList().remove(pj);
                alineamientosOld = em.merge(alineamientosOld);
            }
            if (alineamientosNew != null && !alineamientosNew.equals(alineamientosOld)) {
                alineamientosNew.getPjList().add(pj);
                alineamientosNew = em.merge(alineamientosNew);
            }
            for (Conjuros conjurosListOldConjuros : conjurosListOld) {
                if (!conjurosListNew.contains(conjurosListOldConjuros)) {
                    conjurosListOldConjuros.getPjList().remove(pj);
                    conjurosListOldConjuros = em.merge(conjurosListOldConjuros);
                }
            }
            for (Conjuros conjurosListNewConjuros : conjurosListNew) {
                if (!conjurosListOld.contains(conjurosListNewConjuros)) {
                    conjurosListNewConjuros.getPjList().add(pj);
                    conjurosListNewConjuros = em.merge(conjurosListNewConjuros);
                }
            }
            for (IdiomasPj idiomasPjListNewIdiomasPj : idiomasPjListNew) {
                if (!idiomasPjListOld.contains(idiomasPjListNewIdiomasPj)) {
                    Pj oldPjOfIdiomasPjListNewIdiomasPj = idiomasPjListNewIdiomasPj.getPj();
                    idiomasPjListNewIdiomasPj.setPj(pj);
                    idiomasPjListNewIdiomasPj = em.merge(idiomasPjListNewIdiomasPj);
                    if (oldPjOfIdiomasPjListNewIdiomasPj != null && !oldPjOfIdiomasPjListNewIdiomasPj.equals(pj)) {
                        oldPjOfIdiomasPjListNewIdiomasPj.getIdiomasPjList().remove(idiomasPjListNewIdiomasPj);
                        oldPjOfIdiomasPjListNewIdiomasPj = em.merge(oldPjOfIdiomasPjListNewIdiomasPj);
                    }
                }
            }
            for (CaracteristicasPj caracteristicasPjListNewCaracteristicasPj : caracteristicasPjListNew) {
                if (!caracteristicasPjListOld.contains(caracteristicasPjListNewCaracteristicasPj)) {
                    Pj oldPjOfCaracteristicasPjListNewCaracteristicasPj = caracteristicasPjListNewCaracteristicasPj.getPj();
                    caracteristicasPjListNewCaracteristicasPj.setPj(pj);
                    caracteristicasPjListNewCaracteristicasPj = em.merge(caracteristicasPjListNewCaracteristicasPj);
                    if (oldPjOfCaracteristicasPjListNewCaracteristicasPj != null && !oldPjOfCaracteristicasPjListNewCaracteristicasPj.equals(pj)) {
                        oldPjOfCaracteristicasPjListNewCaracteristicasPj.getCaracteristicasPjList().remove(caracteristicasPjListNewCaracteristicasPj);
                        oldPjOfCaracteristicasPjListNewCaracteristicasPj = em.merge(oldPjOfCaracteristicasPjListNewCaracteristicasPj);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = pj.getId();
                if (findPj(id) == null) {
                    throw new NonexistentEntityException("The pj with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Pj pj;
            try {
                pj = em.getReference(Pj.class, id);
                pj.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The pj with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            Equipo equipoOrphanCheck = pj.getEquipo();
            if (equipoOrphanCheck != null) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Pj (" + pj + ") cannot be destroyed since the Equipo " + equipoOrphanCheck + " in its equipo field has a non-nullable pj field.");
            }
            List<IdiomasPj> idiomasPjListOrphanCheck = pj.getIdiomasPjList();
            for (IdiomasPj idiomasPjListOrphanCheckIdiomasPj : idiomasPjListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Pj (" + pj + ") cannot be destroyed since the IdiomasPj " + idiomasPjListOrphanCheckIdiomasPj + " in its idiomasPjList field has a non-nullable pj field.");
            }
            List<CaracteristicasPj> caracteristicasPjListOrphanCheck = pj.getCaracteristicasPjList();
            for (CaracteristicasPj caracteristicasPjListOrphanCheckCaracteristicasPj : caracteristicasPjListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Pj (" + pj + ") cannot be destroyed since the CaracteristicasPj " + caracteristicasPjListOrphanCheckCaracteristicasPj + " in its caracteristicasPjList field has a non-nullable pj field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            Razas razas = pj.getRazas();
            if (razas != null) {
                razas.getPjList().remove(pj);
                razas = em.merge(razas);
            }
            Escudos escudos = pj.getEscudos();
            if (escudos != null) {
                escudos.getPjList().remove(pj);
                escudos = em.merge(escudos);
            }
            Deidades deidades = pj.getDeidades();
            if (deidades != null) {
                deidades.getPjList().remove(pj);
                deidades = em.merge(deidades);
            }
            Clases clases = pj.getClases();
            if (clases != null) {
                clases.getPjList().remove(pj);
                clases = em.merge(clases);
            }
            Armas armas = pj.getArmas();
            if (armas != null) {
                armas.getPjList().remove(pj);
                armas = em.merge(armas);
            }
            Armas armas1 = pj.getArmas1();
            if (armas1 != null) {
                armas1.getPjList().remove(pj);
                armas1 = em.merge(armas1);
            }
            Armas armas2 = pj.getArmas2();
            if (armas2 != null) {
                armas2.getPjList().remove(pj);
                armas2 = em.merge(armas2);
            }
            Armaduras armaduras = pj.getArmaduras();
            if (armaduras != null) {
                armaduras.getPjList().remove(pj);
                armaduras = em.merge(armaduras);
            }
            Alineamientos alineamientos = pj.getAlineamientos();
            if (alineamientos != null) {
                alineamientos.getPjList().remove(pj);
                alineamientos = em.merge(alineamientos);
            }
            List<Conjuros> conjurosList = pj.getConjurosList();
            for (Conjuros conjurosListConjuros : conjurosList) {
                conjurosListConjuros.getPjList().remove(pj);
                conjurosListConjuros = em.merge(conjurosListConjuros);
            }
            em.remove(pj);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Pj> findPjEntities() {
        return findPjEntities(true, -1, -1);
    }

    public List<Pj> findPjEntities(int maxResults, int firstResult) {
        return findPjEntities(false, maxResults, firstResult);
    }

    private List<Pj> findPjEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Pj.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Pj findPj(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Pj.class, id);
        } finally {
            em.close();
        }
    }

    public int getPjCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Pj> rt = cq.from(Pj.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}
